﻿// BmpImage.h: interface for the BmpImage class.
//
//////////////////////////////////////////////////////////////////////
#ifndef _BMP_IMAGE_H
#define _BMP_IMAGE_H

#include "imageload.h"
#include "ImageErrors.h"
class BmpImage : public CObject
{
public:
	bool SaveFile(const char *cFileName);
	int m_iLastError;
	//设置图像的宽度
	void SetWidth(int width);
	//设置图像的高度
	void SetHeight(int height);
	//设置图像的尺寸
	void SetImageSize();
	//设置图像的数据区
	void SetBmpData(BYTE* data);

	//获取每个像素点所用的字节数
	int GetBytesPerPix();
	//获取颜色数目
	int GetBitsPerPix();
	//获取调色板数目
	int GetNumOfColorTab();
	//获取图像尺寸
	int GetSize();
	//获取图像宽度(像素)
	int GetWidth();
	//获取图像高度(像素)
	int GetHeight();
	//获取图像每行的字节数，其大小必须为4的倍数(字节)
	int GetBmpWidthBytes();

	//获到图像像信息
	BITMAPINFO* GetBmpInfo();
	//获取调色板信息
	RGBQUAD* GetRGBTab();
	//获取图像数据块，是一个字节数组
	BYTE* GetData();

	//回载图像文件，支持当前几种常见的格式（基于imageload.dll库实现）
	//任何文件加载以后，在内存中都是以bmp格式出现，该格式为windows上所有
	//图像的显示格式
	int LoadFile();

	//显示图像于指定的设备上
	void Display(CDC* pDC);
	void Display( HDC hdc);

	//各种构造函数，有不同的用途
	BmpImage();
	BmpImage(CFile *BmpFile);
	BmpImage(CString FileName);
	BmpImage(const char *FileName);

	//析构函数，释放类的生成周期内申请的内存，以及清除其它垃圾
	virtual ~BmpImage();


private:
	//载放图像的格式（.bmp/.gif/.pcx等）
	int m_iImageType;
	//调色板数目
	int m_NumOfColorTab;
	//实际使用的颜色数目
	int m_NumOfColors;
	//标识所读取的文件是否合法
	BOOL m_Valid;
	//载入文件的文件名
	CString m_FileName;
	//设备无关文件（.bmp）的文件头
	BITMAPFILEHEADER m_BmpFileHeader;
	//文件信息头指针
	BITMAPINFOHEADER* m_pBmpInfoHeader;
	//调色板指针，指向调色板开始的第一字节
	RGBQUAD* m_pRGBTAB;
	//所读图像文件的图像数据指针
	BYTE* m_pData;
    //图像信息结构，它是调色板和文件信息头的结合
    BITMAPINFO* m_pBmpInfo;
	//为载入图像文件构造的文件类，便于获到载入文件的各种信息
	CFile *BmpFile;
};

#endif
